package com.xkcyy.one.ai.llm.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * OpenAI模型参数选项
 * 
 * @author yuand
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OpenAiModelOptions {
    /**
     * 模型名称
     */
    private String model;

    /**
     * 基础URL
     */
    private String baseUrl;

    /**
     * API密钥
     */
    private String apiKey;

    /**
     * 温度参数，控制随机性 (0-2.0)
     */
    private Double temperature;

    /**
     * 最大输出token数
     */
    private Integer maxTokens;

    /**
     * 核心采样，替代temperature的另一种方法 (0-1.0)
     */
    private Double topP;

    /**
     * 惩罚重复度
     */
    private Double presencePenalty;

    /**
     * 惩罚频率
     */
    private Double frequencyPenalty;

    /**
     * 是否为推理模型
     */
    private Boolean isReasoning;

    /**
     * 推理起始标记
     */
    private String reasoningStartTag;

    /**
     * 推理结束标记
     */
    private String reasoningEndTag;

    /**
     * 回答起始标记
     */
    private String answerStartTag;

    /**
     * 回答结束标记
     */
    private String answerEndTag;


    private static OpenAiModelOptions defaultOptions;

    /**
     * 默认参数
     * @return OpenAiModelOptions
     */
    public static OpenAiModelOptions defaultOptions() {
        if(defaultOptions == null){
            defaultOptions = OpenAiModelOptions.builder()
                    .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1/")
                    .apiKey("sk-b7cb6e885efd45029f850733d6d2101f")
                    .model("qwen3-235b-a22b")
                    .temperature(0.7)
                    .maxTokens(2000)
                    .isReasoning(true)
                    .build();
        }
        return defaultOptions;
    }
}